home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABUSESRC.ZIP / AbuseSrc / abuse / src / devsel.c < prev    next >
C/C++ Source or Header  |  1996-04-12  |  4KB  |  180 lines

  1. #include "devsel.hpp"
  2. #include "scroller.hpp"
  3. #include "cache.hpp"
  4. #include "game.hpp"
  5.  
  6. void scale_put(image *im, image *screen, int x, int y, short new_width, short new_height);
  7. void scale_put_trans(image *im, image *screen, int x, int y, short new_width, short new_height);
  8. int cur_bg=0,cur_fg=0,cur_char=0;
  9.  
  10. void tile_picker::recenter(image *screen, window_manager *wm)
  11. {
  12.   set_x(get_current(),screen,wm);
  13. }
  14.  
  15. int tile_picker::picw()
  16. {
  17.   switch (type)
  18.   {
  19.     case SPEC_FORETILE :
  20.     {
  21.       return cash.foret(foretiles[0])->im->width()/scale;
  22.     } break;
  23.     case SPEC_BACKTILE :
  24.     {
  25.       return cash.backt(backtiles[0])->im->width()/scale;
  26.     } break;
  27.     default :
  28.       return 30/scale; 
  29.   }
  30. }
  31.  
  32. int tile_picker::pich()
  33. {
  34.   switch (type)
  35.   {
  36.     case SPEC_FORETILE :
  37.     {
  38.       return cash.foret(foretiles[0])->im->height()/scale;
  39.     } break;
  40.     case SPEC_BACKTILE :
  41.     {
  42.       return cash.backt(backtiles[0])->im->height()/scale;
  43.     } break;
  44.     default :
  45.       return 40/scale; 
  46.   }
  47. }
  48.  
  49. int tile_picker::total()
  50. {
  51.   switch (type)
  52.   {
  53.     case SPEC_FORETILE :
  54.     { return nforetiles; } break;
  55.     case SPEC_BACKTILE :
  56.     { return nbacktiles; } break;    
  57.     case SPEC_CHARACTER :
  58.     { return total_objects; } break;    
  59.   }
  60.   return 1;
  61. }
  62.  
  63. tile_picker::tile_picker(int X, int Y, int ID, int spec_type, window_manager *wm, 
  64.              int Scale, int scroll_h, int Wid, ifield *Next)
  65.      : scroller(X,Y,ID,2,2,1,0,Next)
  66.   wid=Wid;
  67.   type=spec_type;
  68.   th=scroll_h;
  69.   scale=Scale;
  70.   set_size(picw()*wid,pich()*th);
  71.   sx=get_current();
  72.   t=total();
  73. }
  74.  
  75.  
  76. void tile_picker::scroll_event(int newx, image *screen, window_manager *wm)
  77. {
  78.   int yo=y,ya=pich(),xw=picw(),c=get_current(),xo;
  79.   image im(xw,ya);
  80.   last_sel=newx;
  81.   int pi=newx;
  82.   screen->bar(x,y,x+l-1,y+h-1,eh->black());
  83.   for (int i=newx;i<newx+th*wid;i++)
  84.   {
  85.     xo=x+((i-newx)%wid)*xw;
  86.     yo=y+((i-newx)/wid)*ya;
  87.  
  88.       int blank=0;
  89.       if (i<t)
  90.       {    
  91.     switch (type)
  92.     {
  93.       case SPEC_FORETILE : 
  94.       {
  95.         if (foretiles[i]<0) blank=1;
  96.         else
  97.         {
  98.           im.clear();
  99.           the_game->get_fg(i)->im->put_image(&im,0,0);
  100.  
  101.           if (rev)
  102.           {
  103.         screen->bar(xo,yo,xo+xw-1,yo+ya-1,wm->bright_color());
  104.         scale_put_trans(&im,screen,xo,yo,xw,ya);
  105.           }
  106.           else scale_put(&im,screen,xo,yo,xw,ya);
  107.         }
  108.       } break;
  109.       case SPEC_BACKTILE : 
  110.       {
  111.         if (backtiles[i]<0) blank=1;
  112.         else
  113.           scale_put(the_game->get_bg(i)->im,screen,xo,yo,xw,ya);
  114.         
  115.       } break;
  116.       case SPEC_CHARACTER : 
  117.       {
  118.         figures[i]->get_sequence(stopped)->get_figure(0)->forward->put_image(&im,0,0);
  119.         scale_put(&im,screen,xo,yo,xw,ya);
  120.       } break;
  121.     }
  122.       } else blank=1;
  123.  
  124.       if (i==c)
  125.         screen->rectangle(xo,yo,xo+xw-1,yo+ya-1,wm->bright_color());
  126.  
  127.  
  128.   }
  129. }
  130.  
  131.  
  132. void tile_picker::handle_inside_event(event &ev, image *screen, window_manager *wm, input_manager *inm)
  133. {
  134.   if (ev.type==EV_MOUSE_BUTTON)
  135.   {
  136.     int sel=((ev.mouse_move.y-y)/pich()*wid)+(ev.mouse_move.x-x)/picw()+last_sel;
  137.     if (sel<t && sel>=0 && sel!=get_current())
  138.     {
  139.       set_current(sel);
  140.       scroll_event(last_sel,screen,wm);
  141.     }
  142.   }
  143. }
  144.  
  145.  
  146.  
  147.  
  148. int tile_picker::get_current()
  149. {
  150.   switch (type)
  151.   { 
  152.     case SPEC_FORETILE : 
  153.     {return cur_fg;} break;
  154.     case SPEC_BACKTILE : 
  155.     {return cur_bg;} break;
  156.     case SPEC_CHARACTER : 
  157.     {return cur_char;} break;
  158.   }
  159.   return 0;
  160. }
  161.  
  162. void tile_picker::set_current(int x)
  163. {
  164.   switch (type)
  165.   {
  166.     case SPEC_FORETILE : 
  167.     {cur_fg=x;} break;
  168.     case SPEC_BACKTILE : 
  169.     {cur_bg=x;} break;
  170.     case SPEC_CHARACTER : 
  171.     {cur_char=x;} break;
  172.   }
  173. }
  174.  
  175.  
  176.  
  177.  
  178.  
  179.